perm filename EDGE.SAI[PIC,HE] blob
sn#430323 filedate 1979-04-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY XYSUPRESS
C00006 00003 END "EDGE"
C00007 ENDMK
C⊗;
ENTRY XYSUPRESS;
BEGIN "EDGE"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
INTERNAL INTEGER PROCEDURE XYSUPRESS(INTEGER inbuf,THR,NOISE);
BEGIN "xysupress"
INTEGER I,J,NV,ylv,ISTOP,JSTOP,yval1,IPTR,outbuf;
INTEGER xval,xcoord,xlevel,xlv;
BOOLEAN xstate;
ISTOP←ROWS(inbuf); JSTOP←COLMS(inbuf);
getbuf(istop,jstop,BYTSZ(INBUF),outbuf←fndbuf);
putsub(isubst(inbuf),jsubst(inbuf),outbuf);
PUTSUP(THR,OUTBUF);
NV←0;
xstate←TRUE;
xval←0;
BEGIN "ALLOC ARRAYS"
SAFE INTEGER ARRAY yval,ycoord,yoval,ylevel [1:JSTOP];
SAFE BOOLEAN ARRAY ystate [1:JSTOP];
ARRCLR(YSTATE,TRUE);
ARRCLR(YVAL); ARRCLR(YCOORD); ARRCLR(YOVAL); ARRCLR(YLEVEL);
FOR I←1 THRU ISTOP DO
BEGIN
IPTR←INPTR(I,1,inbuf);
FOR J←1 THRU JSTOP DO
BEGIN "CALC"
xlv←NV;
ylv←yoval[J];
YOVAL[J]←NV←ILDB(IPTR);
IF ystate[J]
THEN IF NV<ylv
THEN BEGIN
IF (yval[J]-NV)>NOISE
THEN BEGIN
ystate[J]←FALSE;
IF yval[J]>THR THEN PUTPNT(yval1←(ycoord[J]+ylevel[J]%2),J,YVAL[J],outbuf);
ylevel[J]←0;
END
END
ELSE IF NV>ylv
THEN BEGIN
ycoord[J]←I;
yval[J]←NV;
ylevel[J]←0;
END
ELSE ylevel[J]←ylevel[J]+1
ELSE IF NV>ylv THEN
BEGIN
ystate[J]←TRUE;
ycoord[J]←I;
yval[J]←NV;
END;
IF xstate
THEN IF NV<xlv
THEN BEGIN
IF (xval-NV)>NOISE
THEN BEGIN
xstate←FALSE;
IF xval>THR THEN PUTPNT(I,xcoord+xlevel%2,XVAL,outbuf);
xlevel←0;
END
END
ELSE IF NV>xlv
THEN BEGIN
xcoord←J;
xval←NV;
xlevel←0;
END
ELSE xlevel←xlevel+1
ELSE IF NV>xlv
THEN BEGIN
xstate←TRUE;
xcoord←J;
xval←NV;
END;
END "CALC";
ROWCHK(CHKROW,ROWS,I,50);
END;
END;
return(outbuf);
END "xysupress";
END "EDGE"